package com.ely.coupon.activity.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.ely.coupon.activity.dto.CouponActivityDto;
import com.ely.coupon.activity.dto.CouponActivityInfo;
import com.ely.coupon.activity.entity.CouponActivity;
import com.ely.coupon.activity.mapper.CouponActivityMapper;
import com.ely.coupon.activity.service.CouponActivityService;
import com.ely.coupon.activity.service.GenerateCouponCodeService;
import com.ely.coupon.common.core.ex.BaseException;
import com.ely.coupon.common.core.ex.ServiceException;
import com.ely.coupon.common.core.result.ResponseCode;
import com.ely.coupon.common.core.utils.BeanConvertUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;

import javax.annotation.Resource;

@Service
public class CouponActivityServiceImpl implements CouponActivityService {
    @Resource
    private CouponActivityMapper couponActivityMapper;
//    @Resource
//    private GenerateCouponCodeService codeService;

    /**
     * 1  查询优惠卷是否存在
     * 2. 保存操作
     * 3  生成优惠卷码
     *
     * @param
     * @return
     */
    @Override
    public int create(CouponActivityDto couponActivityDto) {
        CouponActivity couponActivity = BeanConvertUtils.convertTo(couponActivityDto, CouponActivity::new);
        int count = couponActivityMapper.insert(couponActivity);
        if (count <= 0) {
            throw new BaseException(ResponseCode.SYS_ERROR);
        }
//        codeService.asyncGenerateCouponCode(couponActivityDto.getCouponQuantity(), couponActivity.getCouponActivityId(), couponActivityDto.getExpiryEndDate());
        return count;
    }

    @Override
    public CouponActivityInfo getCouponActivityInfo(Long couponActivityId) {
        CouponActivity couponActivity = couponActivityMapper.selectById(couponActivityId);
        if (ObjectUtils.isEmpty(couponActivity) || couponActivity.getStatus() != 1) {
            throw new ServiceException(ResponseCode.COUPON_NO_EXIST_ERROR);
        }
        return BeanConvertUtils.convertTo(couponActivity, CouponActivityInfo::new);
    }

    /**
     * @param couponActivityId
     * @param quantity
     * @return
     */
    @Override
    public Integer decrease(Long couponActivityId, Integer quantity) {
        CouponActivity couponActivity = new CouponActivity();
        couponActivity.setCouponActivityId(couponActivityId);
        couponActivity.setCouponQuantity(quantity);
        int count = couponActivityMapper.updateById(couponActivity);
        int num = 1 / 0;
        if (count < 1) {
            throw new ServiceException(ResponseCode.SYS_ERROR);
        }
        return count;
    }

    /**
     * 根据优惠券类型获取新的优惠券信息
     * 该方法通过查询数据库中指定类型的优惠券活动，返回一个包含详细信息的对象
     * 使用了Lambda表达式来简化查询条件的书写
     *
     * @param type 优惠券类型，用于数据库查询以获取特定类型的优惠券信息
     * @return 返回一个CouponActivityInfo对象，包含查询到的优惠券详细信息；如果未找到，返回null
     */
    @Override
    public CouponActivityInfo getNewCouponInfo(Integer type) {
        // 使用Lambda表达式查询数据库，获取指定类型的优惠券活动
        return BeanConvertUtils.convertTo(couponActivityMapper
                .selectOne(new LambdaQueryWrapper<CouponActivity>()
                .eq(CouponActivity::getCouponType, type)), CouponActivityInfo::new);
    }
}
